数据类型：
类型名称		占字节数		其它叫法		表示的数据范围
char				1			signed char			-128~127
sizeof(char) == 1 1000 0000取反符号位不变（1表示负数）去掉符号位加1 0111 1111 + 1 = 1000 0000为-128
unsigned char 		1				none			0~255
int					4			signed int			-2147483648~2147483647
unsigned int		4			unsigned			0~4294967295
short				2			short int			-32768~32767
unsigned short		2			unsigned short int	0~65535
long				4			long int			-2147483648~2147483647
unsigned long		4			unsigned long		0~4294967295
float				4			none				3.4E+/-38(7 digits)
double				8			none				1.7E+/-308(15 digits)
long double			10			none				1.2E+/-4932(19 digits)有些编译器为8
关键字：
auto	break	case	char	const	continue	default		do
double	else	enum	extern	float	for			goto		if
int		long	register	return	short	signed	sizeof		static
struct	switch	typedef		union	unsigned	void	volatile	while
常量类型：
1.整型常量
主要分为三类：
	1.1.十进制数制常数:以10为基数。(0到9).例如，55 ,-20 ,1。在十进制数字系统中，不使用前缀。
	1.2.八进制数系统常数:基数为8。(0到7).例如，034 ,087 ,011。在八进制数系统中，0用作前缀。
	1.3.十六进制数制常数:以16为基数。(0到9,A到F)在十六进制数制中，用0x作为前缀。
	  C语言提供了使用大写或小写字母表示十六进制数字的条件。
2.浮点或实数
我们使用浮点常量来表示数轴上的所有实数，包括所有的小数。我们可以用两种方式来表示:
	2.1小数形式:包含小数点(.)是强制性的。比如2.0, 5.98 ,-7.23
	2.2指数形式:必须包含带符号的指数(e或E)。
	   例如，万有引力常数G = 6.67 x 10-11表示为6.67e-11或6.67E-11。
3.字符常量
字符常量用于为字符分配固定值，包括字母和数字或用单引号(' ')括起来的特殊符号。
每个字符都与其特定的数值ASCII(美国信息交换标准代码)值相关联。
除了这些值之外，C语言中还有一个称为转义序列的集合。
例如，'+ '，' A '， ' d '，转义字符常量 '\0' "\n"，字符常量, 'A'
4.字符串常量
字符串常量是由一对固定的双引号（""）包围的一组字符。
例如，"DataFlair"，"Hello world!"
5.枚举常量
枚举常量是在C语言中用户自定义的数据类型，每个成员赋予一个整型常量。
6.宏定义标识符常量
例如：#define e 2.71 
printf输出类型：
％d整型输出，％ld长整型输出，
％o以八进制数形式输出整数，
％x以十六进制数形式输出整数，
％u以十进制数输出unsigned型数据(无符号数)。
％c用来输出一个字符，
％s用来输出一个字符串，
％f用来输出实数，以小数形式输出，（备注：浮点数是不能定义如的精度的，所以“%6.2f”这种写法是“错误的”！！！）
％e以指数形式输出实数，
%p以地址的方式打印出来，
％g根据大小自动选f格式或e格式，且不输出无意义的零。
转义字符及含义
\o	空字符(NULL)	00H/0
\n	换行符(LF)	0AH/10
\r	回车符(CR)	0DH/13
\t	水平制表符(HT)	09H/9
\v	垂直制表(VT)	0B/11
\a	响铃(BEL)	07/7
\b	退格符(BS)	08H/8
\f	换页符(FF)	0CH/12
\’	单引号27H	/39
\”	双引号22H	/34
\\	反斜杠5CH	/92
\?	问号字符3F	/63
\ddd	任意字符三位八进制
\xhh	任意字符二位十六进制
运算符
运算符优先级和结合律：

1 	后缀运算符：[]    ()    ·    ->    ++    --(类型名称){列表} 	从左到右
2 	一元运算符：++    --    !    ~    +    -    *    &    sizeof_Alignof 	从右到左
3 	类型转换运算符：(类型名称) 	从右到左
4 	乘除法运算符：*    /    % 	从左到右
5 	加减法运算符：+    - 	从左到右
6 	移位运算符：<<    >> 	从左到右
7 	关系运算符：<<=    >>= 	从左到右
8 	相等运算符：==    != 	从左到右
9 	位运算符 AND：& 	从左到右
10 	位运算符 XOR：^ 	从左到右
11 	位运算符 OR：| 	从左到右
12 	逻辑运算符 AND：&& 	从左到右
13 	逻辑运算符 OR：|| 	从左到右
14 	条件运算符：?: 	从右到左
15 	赋值运算符：
     =         +=        -=       *=       /=      %=       &=       ^=      |=   
   <<=      >>= 	从右到左
16 	逗号运算符：， 	从左到右
一元运算符：是只对bai一个表达式执行操作，该表du达式可以是zhi数值数据类型类别dao中的任何一种数据类型。
			对于++、--这样的，只需要一个操作数就能进行运算。
二元运算符：是将两个表达式合成一个稍复杂的表达式，对于+-*/%=等，都需要两个操作数才能进行运算。
			二元的+-*/%=比一元运算符++/--优先级低
: ?这个是唯一一个三目运算符

+、-、* 和 & 运算符记号不但可以当作一元运算符（unary operator，只需要一个操作数），
也可以当作二元运算符（binary operator，需要两个操作数）。
例如，* 只有一个操作数的时候，就是间接运算符（indirection operator），而有两个操作数的时候，就是乘号。

一元运算符比二元运算符具有更高的优先级。例如，表达式 *ptrl**ptr2 等同于表达式（*ptrl）*（*ptr2）。

& 按位与, 如果两个相应的二进制位都为1，则该位的结果值为1，否则为0
| 按位或, 两个相应的二进制位中只要有一个为1，该位的结果值为1
^ 按位异或, 若参加运算的两个二进制位值相同则为0，否则为1
~ 取反, ~是一元运算符，用来对一个二进制数按位取反，即将0变1，将1变0
<< 左移, 用来将一个数的各二进制位全部左移N位，右补0
>> 右移, 将一个数的各二进制位右移N位，移到右端的低位被舍弃，对于无符号数，高位补0

1.按位于运算符的用途&：
	1.1清零	若想对一个存储单元清零，即使其全部二进制位为0，只要找一个二进制数，
			其中各个位符合一下条件：
			原来的数中为1的位，新数中相应位为0。然后使二者进行&运算，即可达到清零目的。
			例：原数为43，即00101011（2），另找一个数，设它为148，即10010100（2），将两者按位与运算：
			00101011（2）&10010100（2）= 00000000（2）
			int a = 43;int b = 148;printf("a&b");
	1.2取一个数中某些指定位 若有一个整数a(2byte),想要取其中的低字节，只需要将a与8个1按位与即可。
							a 00101100 10101100
							b 00000000 11111111
							c 00000000 10101100

	1.3保留指定位   与一个数进行“按位与”运算，此数在该位取1
				    例如：有一数84，即01010100（2），想把其中从左边算起的第3，4，5，7，8位保留下来，运算如下：
					01010100(2) & 00111011(2) = 00010000(2)
					即：a=84, b=59, c=a&b=16

2.按位异或的用途^:
	2.1 交换两个值，不用临时变量
		例如：ａ＝３，即11（2）；ｂ＝４，即100（2）。
		想将ａ和ｂ的值互换，可以用以下赋值语句实现：
		a = a^b;
		b = b^a;
		a = a^b;
		等效于以下两步：① 执行前两个赋值语句：“ａ＝ａ∧ｂ；”和“ｂ＝ｂ∧ａ；”相当于b=b∧(a∧b)。
						② 再执行第三个赋值语句： ａ＝ａ∧ｂ。由于a的值等于（ａ∧ｂ），b的值等于（ｂ∧ａ∧ｂ），
						因此，相当于a=ａ∧ｂ∧ｂ∧ａ∧ｂ，即a的值等于ａ∧ａ∧ｂ∧ｂ∧ｂ，等于ｂ。
	code:main()
		{
			int a = 3;
			int b = 4;
			a = a^b;
			b = b^a;
			a = a^b;
			printf("a = %d->b = %d\n",a,b);
		}
3.按位或运算的用途|：
	按位或运算常用来对一个数据的某些位定值为1。例如：如果想使一个数a的低4位改为1，
	则只需要将a与17（8）进行按位或运算即可。
4.右移运算符>>：
	右移运算符是用来将一个数的各二进制位右移若干位，移动的位数由右操作数指定（右操作数必须是非负值），
	移到右端的低位被舍弃，对于无符号数，高位补0。对于有符号数，某些机器将对左边空出的部分用符号位填补（即“算术移位”），
	而另一些机器则对左边空出的部分用0填补（即“逻辑移位”）。
	注意：对无符号数,右移时左边高位移入0；对于有符号的值,如果原来符号位为0(该数为正),则左边也是移
			入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。
			有的系统移入0,有的系统移入1。移入0的称为“逻辑移位”,即简单移位；移入1的称为“算术移位”。
















